package com.scott.mq.ch01;

import com.rabbitmq.client.*;

import java.io.IOException;

public class ConsumerClient {

    public static void main(String[] args) throws  Exception {

        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数，分别是：主机名、端口号、vhost、用户名、密码
        factory.setHost("192.168.235.168");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("scott");
        factory.setPassword("123456");
        // 1.2.建立连接
        Connection connection = factory.newConnection();

        // 2.创建通道Channel
        Channel channel = connection.createChannel();

        // 3.创建队列 不知道谁先启动 如果有的化 不会创建
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);

        // 4.订阅消息
        channel.basicConsume(queueName, true, new DefaultConsumer(channel){
            @Override
            // handleDelivery=处理投递的消息= 队列中一旦有消息 这个方法就执行= 回调函数
            // body 消息体  字节数组
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 5.处理消息 你拿到消息后干啥?
                String message = new String(body);

                // 这个会后打印
                System.out.println("接收到消息：【" + message + "】");
            }
        });

        // 这个会先打印 因为回调机制  异步机制
        System.out.println("等待接收消息。。。。");

        // 阅后即焚
    }
}
